home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl760 / linslv3j.lzh / LINSOLVE.LIS < prev    next >
File List  |  1992-09-20  |  30KB  |  649 lines

  1.                            - 1 -
  2. 20th September, 1992                                     (Ver 3.3b)
  3.  
  4. CONTENTS:                                                      page
  5.  
  6.     1. About TSLIN in General                                     1
  7.     2. Introduction                                               2
  8.     3. Linear Programming                                         2
  9.     4. Sensitivity Analysis                                       3
  10.     5. Floating Point Significance                                4
  11.     6. Linear Goal Programming                                    4
  12.     7. Specialist's Corner                                        5
  13.     8. Other Computers and Programs                               6
  14.     9. Release Notes for linsolve                                 6
  15.    10. Selected References on Linear and Linear Goal 
  16.        Programming                                               12
  17.    11. List and Purpose of Files in the Package                  14
  18.  
  19.  
  20. 1. About TSLIN in General 
  21. =========================
  22.  
  23. Apply  a question  mark ? with the program  call for the description
  24. of the program, i.e. use LINSOLVE ? for the short instructions.
  25.  
  26. The  public domain version   of the  TSLIN package  may be  used and
  27. distributed   freely    for   NON-COMMERCIAL,     NON-INSTITUTIONAL,
  28. PRIVATE   usage, provided it  is not  changed in  any way  (with the
  29. potential exception  of changing the packing  method). For ANY other
  30. usage,  such as use in a business  enterprise or at a university for
  31. your lectures or  similar  purposes  (and/or  the  larger  version),
  32. please contact  the  author for registration.
  33.    No  unauthorized  charge   for   distributing  this   program  is
  34. allowed.  No part of the  package  may  be  distributed  separately.
  35. Uploading to bulletin boards is encouraged.
  36.  
  37. An individually  registered version is  strictly for the  use of the
  38. registrant. An identical program may NOT be running on more than one
  39. computer at a time. Likewise a site licensed copy must not be run on
  40. any  machine outside the  registered site. A  registration gives the
  41. right  to use  the program  as it  is delivered.  It does  not cover
  42. tutoring or any other similar user support.
  43.  
  44. The  LINSOLVE program  is under  development. Comments  and contacts
  45. are welcome. Feedback is solicited!
  46. Internet address: ts@uwasa.fi       (preferred)
  47. Bitnet address:   SALMI@FINFUN
  48.  
  49. The  author shall not be liable to the user for any direct, indirect
  50. or  consequential loss arising from the use of, or inability to use,
  51. LINSOLVE or this  package, or  any other  program or  file howsoever
  52. caused. No warranty is  given that  the system  will work  under all
  53. circumstances.
  54.  
  55. Timo Salmi
  56. Professor of Accounting and Business Finance
  57. Faculty of Accounting and Industrial Management
  58. University of Vaasa
  59. P.O.BOX 297, SF-65101 Vaasa, Finland
  60.  
  61. .page
  62.                            - 2 -
  63.  
  64.  
  65. 2. INTRODUCTION
  66.  
  67.    LINSOLVE solves linear programming ('LP') problems interactively.
  68. LINSOLVE can also be used to solve linear GOAL programming problems.
  69. For more details, see the later pages.
  70.     The   current maximum   capacity  of  a  registered  program  is
  71. 120  decision  variables,   80  constraints,   and  10   objectives.
  72. Notice,  however, that  the public  domain  (PD)  version  will  not
  73. handle more than 25 decision variables.
  74.    You  give your problem in an 'as is' facsimile format from a file
  75. or keyboard. The program will  ask  your  choices  for  the  options
  76. available.  You  have the  choice of  maximizing or  minimizing, and
  77. even printing out the Simplex-tableaux should you so wish.
  78.  
  79.  
  80. 3. LINEAR PROGRAMMING
  81.  
  82. Consider the following LP-problem
  83.  
  84.                                         (Name for row:)
  85.    maximize z = 2X1 + 3X2               (Z)
  86.    subject to
  87.                  X1 + 2X2 +  X3 ≤ 13    (COND1)
  88.                              X3 =  5    (COND2)
  89.                 -X1 +  X2 + 2X3 ≥  8    (COND3)
  90.                          3 ≤ X3 ≤  6    (LO/UP)
  91.                  X1,X2,X3 ≥ 0
  92.  
  93. Write LINSOLVE to call the program. 
  94.  
  95.    LINSOLVE  first  prompts for   the method  of  input (keyboard or
  96. file),  then  for the constraints,  and  next for the  objective(s).
  97. The problem is given  to  LINSOLVE  in  facsimile  format  from  the
  98. console or an ordinary text file:
  99.  
  100. COND1:  X1 + 2X2 +  X3 < 13
  101. COND2:              X3 =  5     !exclamation marks (!) can be
  102. COND3: -X1 +  X2 + 2X3 >  8     !used to include comments
  103. LO:                 X3 >  3     !after and/or between rows
  104. UP:                 X3 <  6
  105. END
  106. Z:     2X1 + 3X2
  107. END                             !END can be replaced by LOPPU
  108.  
  109.    Each variable, constraint and objective must  be  named  using  a
  110. unique  name.  The name  of a constraint,  objective or variable can
  111. be up   to 10  characters  long.   Each constraint   (and objective)
  112. name must  be followed by colon (:) to  separate it from the rest of
  113. the row.
  114.  
  115. .page
  116.                            - 3 -
  117.  
  118.  
  119.    Spaces are ignored by   the   program.   You   can,   of  course,
  120. utilize spaces to clarify the structure of the problem.
  121.    Lower  and  upper cases  are not  differentiated.  (Thus e.g. "b"
  122. and   "B" are  treated the  same.) The  alphabet consist  of A-Z, Å,
  123. Ä, and Ö.
  124.    A  row  can be continued  using an  ampersand (&)  or a star (*).
  125. E.g. the third constraint could have been given as
  126.       COND1:  X1 + 2X2 &
  127.               + X3 < 13
  128.    LINSOLVE  checks  and reports syntax  errors before proceeding to
  129. solve the problem. If the input is taken from a file, the program is
  130. aborted  when the first error is encountered. If the task is entered
  131. from  the keyboard, and the error is not fatal, LINSOLVE prompts for
  132. the relevant constraint (or objective) again.
  133.    The  program also  prompts  for  the  choice  of  output   device
  134. (screen  or  file),  whether  the objective is  to minimize (if not,
  135. then maximize), and whether the Simplex-tableaux are printed.
  136.    Using systematic   extension such  as  .SOL  in the   output file
  137. name is commendable if output is directed to a file.
  138.    Output can be directed to the screen by giving CON, or no name at
  139. all, to the output file.
  140.  
  141.  
  142. 4. SENSITIVITY ANALYSIS
  143.  
  144.    LINSOLVE  optionally  performs  a  sensitivity  analysis  on  the
  145. coefficients  of the objective function, and the right-hand sides of
  146. the constraints. 
  147.    The sensitivity analysis  for the  objective function  solves the
  148. range of objective  function coefficients  which retain  the optimum
  149. solution. (The  definition of retaining an  optimum solution is that
  150. the variables in the basis remain the same. In the case of objective
  151. function sensitivity analysis, also the values of the optimum values
  152. of the variables remain unchanged.)
  153.    The sensitivity analysis for  the  right-hand  sides  give  their
  154. corresponding ranges retaining the optimum basis. (In this case, the
  155. values of the variables in the optimum basis would be changed.)
  156.    The  sensitivity analysis is only performed if certain conditions
  157. are met.  First, it is  limited to linear  programming problems with
  158. one objective.  Sensitivity analysis  is thus  not performed  in the
  159. case  of linear goal  programming problems. Second,  the analysis is
  160. performed only if the problem has a feasible, non-infinite solution.
  161. Third,  although LINSOLVE can,  and will, solve  problems which have
  162. negative  right-hand sides, no sensitivity analysis is performed for
  163. such tasks.
  164.  
  165. .page
  166.                            - 4 -
  167.  
  168.  
  169. 5. FLOATING POINT SIGNIFICANCE
  170.  
  171.    When   formulating the original LP problem  do not use very large
  172. or  small coefficients in  the   constraints  or  the  objective(s).
  173. Although seldom recognized,  this  requirement  is  endemic  in most
  174. linear  programming codes. This  results  from  the  fact  that  the
  175. accuracy  of  real  numbers  is  always  more  or  less  limited  in
  176. computing,  even  if  mathematically  linear  programming  poses  no
  177. problems.
  178.  
  179. Thus, instead of e.g
  180.    400000X1 + 800000X2 < 2000000
  181. or
  182.    0.004X1 + 0.008X2 < 0.02
  183. use
  184.    4X1 + 8X2 < 20
  185.  
  186.    In   particular, do  not to mix   large and small coefficients in
  187. the same problem.
  188.    In   business applications, a change of  unit of the variables is
  189. often a useful trick for  avoiding  problems  caused  by  computers'
  190. limited accuracy.
  191.    Also avoid   the mistake  of giving   the same  constraint twice,
  192. since such linear  dependency   can   make   the   Simplex-algorithm
  193. fail.  (Travelling salesman problems are particularly prone to these
  194. careless formulations.)
  195.    If the program terminates in an error message:
  196.       Runtime error 205 at xxxx:xxxx.
  197. which indicates a  floating point overflow,  it is not  a failure of
  198. the program code, but a result of a bad scaling of your LP task.
  199.  
  200.  
  201. 6. LINEAR GOAL PROGRAMMING
  202.  
  203.    As   with linear  programming, it  is  assumed  that the  user is
  204. fully  familiar with the concept of linear goal programming. If not,
  205. the  text-books  by  Sang  M.  Lee  (Goal  Programming  for Decision
  206. Analysis)  and James P. Ignizio  (Goal Programming) are recommended.
  207. See the references at the end of these instructions.
  208.    Consider  the following linear goal  programming problem where P1
  209. denotes the  highest priority level. Note  that the standard of goal
  210. programming is minimization.
  211.  
  212.    Minimize Z = P1(d2+) + 2P2(d1-) + 3P2(d2-)
  213.    subject to
  214.                  X1 + 2X2                   > 2   (ROW1)
  215.                 4X1 + 2X2 + d1-             = 4   (ROW2)
  216.                 3X1 + 5X2       + d2- - d2+ = 3   (ROW3)
  217.                        X2                   < 5   (ROW4)
  218.                  X1,X2,d1-,d2-,d2+ > 0
  219.  
  220. .page
  221.                            - 5 -
  222.  
  223.  
  224. The corresponding input to LINSOLVE should be
  225.  
  226. ROW1:  X1 + 2X2                   > 2
  227. ROW2: 4X1 + 2X2 + D1N             = 4
  228. ROW3: 3X1 + 5X2       + D2N - D2P = 3
  229. ROW4:        X2                   < 5
  230. END
  231. P1: D2N           !Highest priority first
  232. P2: 2D1N + 3D2N
  233. END
  234.  
  235.  
  236. 7. SPECIALIST'S CORNER
  237.  
  238. The Algorithm
  239.  
  240.    LINSOLVE  applies   the   two-stage  Simplex-method.  (In  linear
  241. goal   programming    a   corresponding   multiple-stage    Simplex-
  242. method.)  In  both   cases,   artificial  variables  and   objective
  243. (called   "Extra" in  LINSOLVE_EXE) are added to the problem. In the
  244. first stage the  algorithm  tries  to  get  rid  of  the  artificial
  245. variables. (If  it can't, the  solution of the   original problem is
  246. not feasible.  If this is the case, LINSOLVE duly reports the fact.)
  247. In the subsequent stage(s) LINSOLVE  finds   the  solution   to  the
  248. problem given  by the user.
  249.    If  the user requests LINSOLVE to print the Simplex-tableaux, the
  250. Extra    objective   and     Extra    variables     are    included.
  251. Similarly,  the Extra objective  appears  on  the   listing  of  the
  252. optimum  solution.  (Its value  will become   zero, if  the original
  253. problem has a feasible solution.)
  254.  
  255.  
  256. Altering the zero criterion
  257.  
  258.    The accuracy   of  the   floating  point   arithmetic  is  eleven
  259. significant digits in  the Turbo  Pascal 5.0  (internal) arithmetic.
  260. Round-off errors  tend accumulate   in  the   Simplex-algorithm.  To
  261. counter  this  fact, all elements less  than a zero-limit (5E-6) are
  262. set  to exact zero  at each iteration.  An experienced user may want
  263. to alter this limit. This can be done by giving the new value as the
  264. parameter of the program call. For example: LINSOLVE 0.0001
  265.    The  optional   statistics  include  the   number  of  round-offs
  266. performed by  the program. The  smaller the figure,  the less likely
  267. the problems due to the floating point arithmetic.
  268.  
  269. .page
  270.                            - 6 -
  271.  
  272. 8. OTHER COMPUTERS AND PROGRAMS
  273.  
  274.    The LINSOLVE program  is  also  available  for  the  Sinclair  QL
  275. computer. It is part of a Public Domain library for QUANTA members. 
  276.    LINSOLVE  has also been programmed for the VAX 11/750 computer at
  277. the Vaasa University, by  the  author,  but  the  input  and  output
  278. commands  of the VAX "TAVOPT" are in Finnish, and the program is not
  279. public domain. The origins  of LINSOLVE  date back  to 1971  and IBM
  280. 1130 and my licentiate thesis in management science.
  281.    The  package for  drawing LP  programs and  other figures  in two
  282. dimensions, TSDRAW, is available separately for the PC.
  283.  
  284.  
  285. 9. RELEASE NOTES
  286.  
  287.    In version 1.1 a  bug preventing  the input  of more  than (only)
  288. eleven constraints was corrected.
  289.  
  290.    In version 1.2 the sensitivity analysis was added to the program.
  291. Also  some minor  improvements were  made in  the defaults,  and the
  292. information  about the solution, when the  solution is directed to a
  293. file. The  algorithm has been  tested with more  problems with known
  294. solutions. The  rare special situations  where the Simplex-algorithm
  295. is known to fail, have not yet been tested. (See notes on ver 2.1.)
  296.  
  297.    In version 1.3 some minor stylistic changes were made.
  298.  
  299.    In  version 1.4 the possibility of entering a header on each page
  300. of  output was added. If the very first line of the task starts with
  301. !! as in
  302.             !!A tiny task
  303.             E1: X1 + 2X2 < 2
  304.             END
  305.             MAX: 3X1 + 5X2
  306.             END
  307. then the text  "A tiny task"  is used as  a header for  each page of
  308. output,  if the output is directed to a file. !! indicates a header,
  309. a single ! an ordinary comment.
  310.  
  311.    In version 1.5 more error checks have been added to safeguard the
  312. user  against giving input that could not be parsed into a proper LP
  313. format. E.g. it is  now  checked  that  a  continuation  row  really
  314. follows  after the use the  the continuation marker (&  or *) on the
  315. previous row.
  316.  
  317.    Version  1.6 introduces a built-in help  to linsolve. Help can be
  318. invoked  by entering ? when the program asks for input. From version
  319. 1.6  it is possible to use the  Scandinavian characters (Å, Ä, Ö) in
  320. the variable, constraint and objective names.
  321.  
  322. .page
  323.                            -  7 - 
  324.  
  325.    Version 1.7 uses an improved directory utility. If the input file
  326. is not found, the user is given the option of listing directories on
  327. the screen without having to exit LINSOLVE. The directory mask (file
  328. definition) is now much more relaxed, and almost the same as for the
  329. MS-DOS dir  command. More information  on this feature  can be found
  330. within the TSUTIL package. (See the TSPROG.INF file.)               
  331.  
  332.    Version 1.8 introduces mostly internal changes not visible to the
  333. user.
  334.  
  335.    In version  1.9 an attempt to rewrite  a read-only output file no
  336. longer crashes the program.
  337.  
  338.    Version  2.0 improves  the speed  of reading  the problem  from a
  339. file.
  340.  
  341.    Version 2.1: A linear programming problem can generally be stated
  342. as
  343.         max  cx
  344.         s.t.
  345.              Ax ≤ b
  346.               x ≥ 0
  347. Version  2.1 introduces an index of the accuracy of the solution. In
  348. linear programming computer implementations the round-off errors may
  349. cause problems,  and even deviations from  optimality. To assess the
  350. effect of  these problems on the current  task the final tableau the
  351. is recalculated from the  inverse  matrix  of  the  base.  Then  the
  352. original  solution tableau is compared with the recalculated tableau
  353. by  defining four different (in)accuracy measures. These are the sum
  354. of absolute deviations  in the left-hand  side matrix A,  the sum of
  355. absolute deviations  in the solution  vector b, and  sum of absolute
  356. deviations   in  the  simplex  coefficients.  The  simplex-algorithm
  357. version  used in this program seeks the optimum by trying to get all
  358. the simplex coefficients to be non-positive. The fourth (in)accuracy
  359. measure is  the  sum  of  the  free  recalculated  positive  simplex
  360. coefficients. The  four inaccuracy measures  are called respectively
  361. a-inaccuracy, b-inaccuracy, z-inaccuracy,  and  non-optimality.  The
  362. overall inaccuracy reported together with the solution is simply the
  363. sum of these four inaccuracies.
  364.    Another novel feature in version  2.1  is  checking  the  special
  365. cases  caused by  linear dependencies  and point-like  solutions. In
  366. both  these cases (see the linear programming literature) artificial
  367. (Extra)  variable(s) may remain in the optimal basis but as zero(s).
  368. If the solution of a linear programming or a linear goal programming
  369. problem is non-feasible then the value of the artificial variable(s)
  370. staying in basis  will be  non-zero. These  zero/non-zero conditions
  371. are now detected by LINSOLVE.
  372.  
  373. .page
  374.                            - 8 -
  375.  
  376.    Parsing the  problem (i.e. reading and  interpreting it) has been
  377. made faster, as has been computing the iterations.
  378.    The  range of the zero described  in an earlier section "Altering
  379. the  Zero Criterion" has been made wider, and it is now possible not
  380. to  alter the small elements at all. This is achieved by calling the
  381. program by LINSOLVE 0. This  is  not  advisable,  though,  since  it
  382. usually leads to suboptimal solutions.
  383.  
  384.    Version  2.2 introduces the choice between starting each new page
  385. of  output (when directed to  a file) either with  a formfeed or two
  386. blank lines (earlier  it  was  always  a  formfeed).  If  output  is
  387. directed to the printer, that is to the file PRN, the user now has a
  388. choice of the left margin between 0 and 20.
  389.  
  390.    Version   2.3:  The  default  output  gives  the  values  of  the
  391. variables, slacks, objectives,  and  the  shadow  prices,  i.e.  the
  392. simplex coefficients of  the  variables  in  the  first  basis.  The
  393. simplex coefficients  of the the original  variables have been added
  394. to the default output in version 2.3. They are given under the title
  395. REDUCED  COST. (For interpreting the shadow prices and reduced costs
  396. see the appropriate literature.)
  397.    If the output is directed to a printer (that is to file PRN), the
  398. online/offline  status of the printer is now tested immediately, and
  399. the user  is notified.  (In the  program code,  this is  achieved by
  400. using the interrupts for the testing, instead of IOResult checking.)
  401.  
  402.    Version  2.4: The program  has been recompiled  with Turbo Pascal
  403. 5.0. The bug  preventing reading  a read-only  file has  been fixed.
  404. (This bug was actually  due  to  Turbo  Pascal  4.0  documentation.)
  405. Furthermore, the program  now augments  pathnames to  filenames when
  406. appropriate.
  407.  
  408.    Version  2.5: Most importantly, new files  have been added to the
  409. TSLIN  package. See the separate documentation in MPS2EQU.INF and in
  410. chapter 9.  As to linsolve, if an input  file is not found, the user
  411. has been  given  the  option  of  listing  directories  from  within
  412. linsolve. This directory routine  has  been  rewritten  for  a  more
  413. relaxed  syntax and tighter code. A bug in the heap control has been
  414. fixed. This  caused problems in rare cases  during the out of memory
  415. condition.   The  maximum  number  of   objectives  in  linear  goal
  416. programming was one too small because of a bug. This has been fixed.
  417.  
  418.  
  419. .page
  420.                            - 9 -
  421.  
  422.  
  423.    Version 2.6: Modern technology (sometimes not so modern :-) makes
  424. it possible to project a computer screen using an overhead projector
  425. onto  a wall screen e.g. for classroom  usage. In trying this out, I
  426. noticed,  that it would be useful to have the option of changing the
  427. linsolve colors. The consequent new usage of the LINSOLVE call is
  428.  
  429.    LINSOLVE [/fx (foreground color)] [/bx (background color)]
  430.             [/zxx.x (zero criterion)] [/h (help)]
  431.  
  432. The simplest  way of changing the colors  is using just LINSOLVE /f,
  433. which  will give you a white text on black background. The /f and /b
  434. parameters  can include  a color  number ranging  from 0-15  for the
  435. foreground,  and 0-7 for the background.   For the color map, either
  436. experiment, or see a Turbo Pascal manual for TextColor constants.
  437.    I  have made a couple  of minor internal changes  to speed up the
  438. program at certain phases. Also, the help screen can now be directed
  439. to a file, or to the printer. For this, use LINSOLVE /h > PRN.
  440.  
  441.    Version  2.7: This revision includes  two major enhancements. The
  442. capacity  of the program  has been increased  from 55x80 constraints
  443. and variables  to 80x120. The second  enhancement is the possibility
  444. of input recall with line-editing.
  445.    A well-known bottle-neck of MsDos is the fact that the Intel 808x
  446. processors limit  array sizes to  64K. To use  larger arrays special
  447. techniques are needed.  LINSOLVE version  2.7 employs  the so-called
  448. huge-arrays  method. This means enhanced capacity, but also slightly
  449. slower code.  LINSOLVE still runs  in the memory,  and remains fast,
  450. contrary to  many other LP  programs using sloo..oow  disk access in
  451. iterating.
  452.    The  possibility of input recall with line-editing is introduced.
  453. This means  that in  giving input  from the  keyboard, you  have the
  454. following   extra  input  keys  available:  Home,  End,  CursorLeft,
  455. CursorRight,  CursorUp, Delete, and Esc. CursorUp is the recall key.
  456. The  others are self-explanatory. This option is particularly useful
  457. in giving the linear programming task from the keyboard in classroom
  458. usage. That  is the  primary reason  why I  added this  feature into
  459. linsolve.
  460.  
  461.    Version 2.8:  The  public  domain  task  size  limits  have  been
  462. increased to 55x25 from  55x15.  Line-editing  has  been  made  more
  463. context sensitive, and the Insert key has been made functional.
  464.  
  465.    Version 2.9:  If output  is directed  to a  file, the  file ready
  466. message now also  contains the  file size  in bytes.  The acceptable
  467. file names now also include the ( ) and _ characters.
  468.  
  469. .page
  470.                            - 10 -
  471.  
  472.  
  473.    Version 3.0: The  program can  now be  interrupted in  an orderly
  474. manner by  pressing CTLC-C  or the  break key.  The cursor  will now
  475. resume its normal size after such a break.  
  476.    The input  recall has been enhanced  to remember the continuation
  477. lines.  If you are giving the input  from the keyboard and you enter
  478. e.g.
  479.      E1 : 20X1 + &
  480.           30X2 &
  481.           10
  482. which has  an error (the last  line should be =  10), you can recall
  483. each of these lines by applying consequtive PgUps until you are back
  484. at the third  line. (Then you  can apply line-editing  to insert the
  485. missing = ).
  486.  
  487.    Version 3.1:  First see the discussion  on inaccuracy indexes for
  488. version  2.1.   The  idea  is  that   in  large  and/or  ill-behaved
  489. LP-problems round-off errors  can  cause  serious  inaccuracies  and
  490. deviations from  the mathematical,  true optimum.   Linsolve  guards
  491. against such  errors  both  in  the  algorithm,  and  by  displaying
  492. inaccuracy indexes.  The number  of these  indexes has  been reduced
  493. from  four to two, and their  calculation has been altered somewhat.
  494. First there is a non-optimality  index  which  now  gives  the  norm
  495. (square    root   of    the   sum    of   the    squared)   positive
  496. simplex-coefficients in the  optimal  tableau.   Mathematically,  it
  497. should have none,  and thus the  closer to zero,  the better. Second
  498. there  is an inaccuracy index giving the  norm of the deviation of a
  499. recalculated     optimal    simplex-tableu    from    the    optimal
  500. simplex-tableau.  The  recalculation is based on  the inverse of the
  501. basis matrix. (See the relevant literature for details.) The norm is
  502. used since  it  gives  the  length  of  the  deviation  when  it  is
  503. considered a vector.
  504.  
  505.    Version 3.2:  Input and output  file names can  now be optionally
  506. given as parameters in the program call, e.g.
  507.      LINSOLVE /ic:\ordat\lptask.dat /of:\tmp
  508. The name  of the input file  and output file will  still be asked by
  509. the  program, but if you press the CursorUp key at the question, the
  510. given  file names will  pop up. I  added this option  when I noticed
  511. that this  is more  convenient for  solving problems  where frequent
  512. changes in the input data are needed.
  513.    When  a file is not found, the user has the option to look at the
  514. directory. The  directory option has  been improved and  a minor bug
  515. has been corrected.
  516.  
  517. .page
  518.                            - 11 -
  519.  
  520.    Version  3.3: Version 2.6 introduced the possibility of selecting
  521. the foreground and background colors of linsolve by applying /f# and
  522. /b#  switches in the program call where # means a color number (0-15
  523. for   foreground,  0-7   for  background).   I  have   made  several
  524. improvements. The  forground and the background  color can no longer
  525. be made  equal to each  other. Giving an  out of range  value is now
  526. trapped  by the program. Most importantly the color codes can now be
  527. optionally given as color names  (Black,  Blue,  Green,  Cyan,  Red,
  528. Magenta,  Brown,   LightGray,   DarkGray,   LightBlue,   LightGreen,
  529. LightCyan,  LightRed, LightMagenta, Yellow, and White). After having
  530. not used  linsolve for  a spell  myself, and  needing to  change the
  531. colors for an overhead projector session in a classroom situation (I
  532. got   squarely  stuck  for  a  minute),  I  decided  to  make  these
  533. improvements.
  534.    The normal  maximum width of  a simplex tableau  is 79 characters
  535. which  means presenting six columns of figures per row. I have added
  536. a switch /c# to the  program call  where #  can range  from 1  to 15
  537. columns. This means a choice of a  wider (or a narrower) output than
  538. the standard screen. This switch is operative in registered versions
  539. only.
  540.    When  output is directed to the  printer, the program checks that
  541. the printer is online. The method  I  used  earlier  fails  on  some
  542. printers, so I  adapted  another  method  which  is  hopefully  more
  543. robust.
  544.    Updated the list of references (Chapter 10 of the instructions).
  545.  
  546.    Version  3.3b: Since version 3.2 the  input and output file names
  547. can  be optionally given as parameters in the program call, e.g.
  548.       LINSOLVE /ic:\ordat\lptask.dat /of:\tmp
  549. This  option  has   been  improved.   The  "prefilled"   name  (e.g.
  550. c:\ordat\lptask.dat) will now automatically appear on the input line
  551. without the  need of pressing the cursor up  key. All you need to do
  552. is to press enter.
  553.    Also made some minor internal changes not worth recording.
  554.  
  555.  
  556.  
  557.  
  558. .page
  559.                            - 12 -
  560.  
  561.  
  562. 10. SELECTED REFERENCES ON LINEAR AND LINEAR GOAL PROGRAMMING
  563.  
  564. Gass,  Saul I. Linear Programming:  Methods and Applications. Second
  565.   edition. McGraw-Hill Book Company, 1964.
  566.  
  567. Hadley,  G. Linear  Programming. Addison-Wesley  Publishing Company,
  568.   1962. (This is  one of the  classics on the  mathematics of linear
  569.   programming.)
  570.  
  571. Ignizio, James  P.   Goal  Programming  and  Extensions.   Lexington
  572.   Books, 1976.
  573.  
  574. Ignizio, James p.   "A  Review  of  Goal  Programming:  A  Tool  for
  575.   Multiobjective Analysis",  Journal  of  the  Operational  Research
  576.   Society, Vol. 29, No. 11 (November 1978), ss. 1109-1119.
  577.  
  578. Jennergren, Peter L.  "Linear programming on  a micro -  The case of
  579.   the  Apple II", European Journal of Operational Research, Vol. 19,
  580.   No. 2 (February 1985), pp. 212-216.
  581.  
  582. Jääskeläinen,  Veikko.    Lineaarinen  optimointi   ja  budjetointi.
  583.   Ekonomia-sarja 18.  Tapiola: Weilin+Göös, 1972.
  584.  
  585. Jääskeläinen,  Veikko.  Linear  Programming  and  Budgeting.  Malmö,
  586.   Sweden: Student-litteratur,  1975.  (One  of  the  very  few  good
  587.   applications oriented text-books  on  the  utilization  of  linear
  588.   programming. Covers also linear goal programming.)
  589.  
  590. Kallio,  Markku. A  Corporate Planning  Model. Research  Paper D-17.
  591.   Helsinki School of Economics, January 1977.
  592.  
  593. Lee,  Sang M.  Goal Programming for Decision Analysis. Philadelphia:
  594.   Auerbach Publishers Inc., 1972.  (out of print?)
  595.  
  596. Llewellyn, John &  Ramesh Sharda.  "Linear Programming  Software for
  597.   Personal Computers: 1990 Survey", OR/MS Today, (October 1990), pp.
  598.   35-47..
  599.  
  600. Perälä,    Tarja.    Tavoiteoptimointi    ja   investointipäätökset.
  601.   Tutkielma   kvantitatiivisen  yritysanalyysin  koulutusohjelmassa.
  602.   Vaasan korkeakoulu 1982. (Sisältää kattavan lähdeluettelon.)
  603.  
  604. Salmi, Timo. Lineaarinen optimointi ja sen soveltaminen. Täydennetty
  605.   painos.  Vaasan  korkeakoulu,  1981.  (Yksinkertaistettu  johdatus
  606.   aiheeseen.)
  607.  
  608.  
  609. .page
  610.                            - 13 -
  611.  
  612.  
  613.    
  614. Schniederjans, Mark  J.  Linear  Goal  Programming.  Princeton,  New
  615.   Jersey:  Petrocelli  Books,  1984.  (Contains  a  lot  of  further
  616.   references.)
  617.  
  618. Stadler, Hartmut  &  Maren  Groenenveld  &  Heidrun  Hermanssen.  "A
  619.   Comparison  of LP  Software on  Personal Computers  for Industrial
  620.   Applications",  European Journal of Operational Research. Vol. 35,
  621.   No. 2 (May 1988), pp. 146-159.
  622.  
  623.  
  624.  
  625. .page
  626.                            - 14 -
  627.  
  628.  
  629.  
  630. 11. LIST AND PURPOSE OF FILES IN THE PACKAGE
  631.  
  632. Filename        Comment                         
  633. --------        --------------------------------
  634. DEMO.MPS        Mps-input-format demodata       
  635. DEMOGOAL.DAT    Linear goal programming demodata
  636. DEMOLP.DAT      Linear programming demodata     
  637. DEMOLP2.DAT     Linear programming 2nd demodata 
  638. FILE_ID.DIZ     Brief characterization of TSLIN 
  639. LINSOLVE.EXE    Linear (and goal) programming   
  640. LINSOLVE.LIS    Document                        
  641. MPS2EQU.EXE     Mps input to equation format    
  642. MPS2EQU.INF     Document on MPS2EQU conversion  
  643. TSPROG.INF      List of PD programs from T.Salmi
  644. VAASA.INF       Info: Finland, Vaasa, U of Vaasa
  645. ----            ------             ------  -----
  646. 0011           
  647.  
  648.  
  649.